package caralibrobd;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;


//<editor-fold defaultstate="expanded" desc="Clase Perfil">
/**
 *
 * @author yaiza y merce
 */
public class Perfil implements Serializable{

    private Date data;
    private String nome;
    private String contrasinal;
    private String estado;
    private String biografia = "";
    private HashMap<String, Perfil> solicitudesAmizade;
    private HashMap<String, Perfil> amigos;
    private HashMap<String, Publicacion> publicacions;
    private HashMap<String, Mensaxe> mensaxes;
    private HashMap<String, Evento> eventos;

    /**
     *
     * @param data
     * @param nome
     * @param contrasinal
     * @param estado
     */
    public Perfil(Date data, String nome, String contrasinal, String estado) {
        this.data = data;
        this.nome = nome;
        this.contrasinal = contrasinal;
        this.estado = estado;
        this.solicitudesAmizade = new HashMap<>();
        this.amigos = new HashMap<>();
        this.publicacions = new HashMap<>();
        this.mensaxes = new HashMap<>();
        this.eventos =  new HashMap<>();
    }

    //<editor-fold defaultstate="collapsed" desc="Atributos simples set/get">
    /**
     *
     * @return
     */
    public Date getData() {
        return data;
    }

    /**
     *
     * @param data
     */
    public void setData(Date data) {
        this.data = data;
    }

    /**
     *
     * @return
     */
    public String getNome() {
        return nome;
    }

    /**
     *
     * @param texto
     */
    public void setNome(String texto) {
        this.nome = texto;
    }

    /**
     *
     * @return
     */
    public String getContrasinal() {
        return contrasinal;
    }

    /**
     *
     * @param texto
     */
    public void setContrasinal(String texto) {
        this.contrasinal = texto;
    }

    /**
     *
     * @return
     */
    public String getEstado() {
        return estado;
    }

    /**
     *
     * @param texto
     */
    public void setEstado(String texto) {
        this.estado = texto;
    }

    /**
     *
     * @return
     */
    public String getbiografia() {
        return biografia;
    }

    /**
     *
     * @param texto
     */
    public void setbiografia(String texto) {
        this.biografia = texto;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Atributos HashMap set/get">
    /**
     *
     * @return
     */
    public HashMap<String, Perfil> getSolicitudesAmizades() {
        return solicitudesAmizade;
    }

    /**
     *
     * @return
     */
    public HashMap<String, Perfil> getAmigos() {
        return amigos;
    }

    /**
     *
     * @return
     */
    public HashMap<String, Publicacion> getPublicacions() {
        return publicacions;
    }

    /**
     *
     * @return
     */
    public HashMap<String, Mensaxe> getMensaxes() {
        return mensaxes;
    }

    /**
     * @return the eventos
     */
    public HashMap<String, Evento> getEventos() {
        return eventos;
    }

    /**
     *
     * @param hmSolicitudesAmizade
     */
    public void setSolicitudesAmizade(HashMap<String, Perfil> hmSolicitudesAmizade) {
        this.solicitudesAmizade = hmSolicitudesAmizade;
    }

    /**
     *
     * @param hmAmigos
     */
    public void setAmigos(HashMap<String, Perfil> hmAmigos) {
        this.amigos = hmAmigos;
    }

    /**
     *
     * @param hmPublicacion
     */
    public void setPublicacions(HashMap<String, Publicacion> hmPublicacion) {
        this.publicacions = hmPublicacion;
    }

    /**
     *
     * @param hmMensaxe key String value Mensaxe
     */
    public void setMensaxes(HashMap<String, Mensaxe> hmMensaxe) {
        this.mensaxes = hmMensaxe;
    }

    /**
     * @param eventos the eventos to set
     */
    public void setEventos(HashMap<String, Evento> eventos) {
        this.eventos = eventos;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Operaciones engadir/aceptar/reixeitar/eliminar">
    /**
     * Engade unha amizade.
     *
     * @param aPerfil clase que conten os atributos da amizade.
     */
    public void engadirAmigo(Perfil aPerfil) {
        String Key;
        Key = aPerfil.getNome();
        if (!amigos.containsKey(Key)) {
            amigos.put(Key, aPerfil);
        }
    }

    /**
     * Engade unha publicación.
     *
     * @param publicacion clase que conten os atributos da publicación.
     */
    public void engadirPublicacion(Publicacion publicacion) {
        String Key;
        Key = String.valueOf(publicacion.getData().getTime()) + publicacion.getAutor().getNome();
        if (!publicacions.containsKey(Key)) {
            publicacions.put(Key, publicacion);
        }
    }

    /**
     * Engade unha mensaxe privada.
     *
     * @param mensaxe clase que conten os atributos da mensaxe.
     */
    public void engadirMensaxePrivada(Mensaxe mensaxe) {
        String Key;
        Key = String.valueOf(mensaxe.getData().getTime()) + mensaxe.getRemitente();
        if (!mensaxes.containsKey(Key)) {
            mensaxes.put(Key, mensaxe);
        }
    }

    /**
     * Engade unha solicitud de amistade.
     *
     * @param perfil clase que conten os atributos da solicitude de amizade.
     */
    public void engadirSolicitudeDeAmizade(Perfil perfil) {
        String Key;
        Key = perfil.getNome();
        if (!solicitudesAmizade.containsKey(Key) && (this != perfil)) {
            solicitudesAmizade.put(Key, perfil);
        }
    }

    public void engadirEvento(Evento evento) {
        String Key;
        Key = String.valueOf(evento.getData().getTime()) + evento.getAutor().getNome();
        if (!eventos.containsKey(Key)) {
            eventos.put(Key, evento);
        }
    }

    public void eliminarEvento(String Key) {
        if (eventos.containsKey(Key)) {
            eventos.remove(Key);
        }
    }

    /**
     * Elimina unha mensaxe.
     *
     * @param textoKey texto polo que se busca unha mensaxe para eliminala.
     */
    public void eliminarMensaxe(String Key) {
        if (mensaxes.containsKey(Key)) {
            mensaxes.remove(Key);
        }
    }

    /**
     * Acepta una solicitud de amistad.
     *
     * @param perfil
     */
    public void aceptarSolicitudeDeAmizade(Perfil perfil) {
        String Key;
        Key = perfil.getNome();
        if (!amigos.containsKey(Key)) {
            amigos.put(Key, perfil);
        }
    }

    /**
     * Elimina una solicitud de amistad.
     *
     * @param perfil
     */
    public void rexeitarSolicitudeAmizade(Perfil perfil) {
        String nomeKey;
        nomeKey = perfil.getNome();
        if (solicitudesAmizade.containsKey(nomeKey)) {
            solicitudesAmizade.remove(nomeKey);
        }
    }
//</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Otros Métodos totalMensaxesSenLer">
    /**
     * Total das mensaxes por ler.
     *
     * @return devolve o total de mensaxes sen ler.
     */
    public int totalMensaxesSenLer() {
        int c = 0;
        for (Mensaxe m : mensaxes.values()) {
            if (!m.isLido()) {
                c++;
            }
        }
        return c;
    }
    //</editor-fold>

}
//</editor-fold>
